﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Reflection;
using Maestro_Proveedores;

namespace Maestro_Proveedores.Forms
{
    public partial class Mantenimiento : Form
    {
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;
        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "065";
        /// <summary>
        /// <para>Este formulario permite realizar cambios en la informacion que se maneja en el maestro de proveedores.</para>
        /// <list type="bullet">
        /// <item>
        ///     <term>
        ///         Grupos de servicios
        ///     </term>
        ///     <description>
        ///         Definir los grupos en los que se pueden organizar los bienes/servicios registrados en el maestro.
        ///     </description>
        /// </item>
        /// <item>
        ///     <term>
        ///         Clasificacion de servicios
        ///     </term>
        ///     <description>
        ///         Definir los tipos de bienes/servicios registrados en el maestro.
        ///     </description>
        /// </item>
        /// <item>
        ///     <term>
        ///         Bancos
        ///     </term>
        ///     <description>
        ///         En esta parte solo se manipulan bancos extrangeros, ya que lo bancos nacionales de migran desde INFOR XA
        ///     </description>
        /// </item>
        /// <item>
        ///     <term>
        ///         Motivos de entregas imperfectas
        ///     </term>
        ///     <description>
        ///         En esta parte se registran los causales definidos para clasificar tanto los rechazos, como las devoluciones que se realizan en el almacen de la Corporación.
        ///     </description>
        /// </item>
        /// <item>
        ///     <term>
        ///         Tipos de Criterios de certificacion
        ///     </term>
        ///     <description>
        ///         ....
        ///     </description>
        /// </item>
        /// <item>
        ///     <term>
        ///         Criterios de certificacion
        ///     </term>
        ///     <description>
        ///         ....
        ///     </description>
        /// </item>
        /// </list>
        /// </summary>
        public Mantenimiento()
        {
            InitializeComponent();            
        }
             
        private void parametros_VisibleChanged(object sender, EventArgs e){


            if (this.Visible == true)
            {
                this.tabControl1.SelectedIndex = 0;
                return;
            }            
        }

        private void Mantenimiento_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_TIP_SUMNS' Puede moverla o quitarla según sea necesario.
            this.pRV_TIP_SUMNSTableAdapter.Fill(this.cORPORATIVADataSet.PRV_TIP_SUMNS);
            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_CRITR' Puede moverla o quitarla según sea necesario.
            this.pRV_CRITRTableAdapter.Fill(this.cORPORATIVADataSet.PRV_CRITR);
            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_TIP_CRITR' Puede moverla o quitarla según sea necesario.
            this.pRV_TIP_CRITRTableAdapter.Fill(this.cORPORATIVADataSet.PRV_TIP_CRITR);
            this.pRV_bancoTableAdapter.Fill_EXTRANJEROS(this.cORPORATIVADataSet.PRV_banco);
            this.pRV_entregaimperfecta_motivoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_ENTREGAIMPERFECTA_MOTIVO);
            this.pRV_tipo_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_tipo_servicio);
            this.pRV_tipo_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_tipo_servicio);
            this.pRV_grupoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_grupo);

            this.tipoComboBox.DataSource = Arreglos.EntregasImperfectas;
            this.pRV_bancoBindingSource.AddNew();
            //--- auditoria
            if (ConfiguracionDelSistema.auditar)
            {
                Session.SEG_PERMISOSTableAdapter.FillByTipoGrupo(Session.AUDITORIADataSet.SEG_PERMISOS, TIPO + Session.Seg_USUARRow.CODGRU);
                this.seg_PERMRow = Session.AUDITORIADataSet.SEG_PERMISOS[0];
            }
        }
              
        #region Exepciones en la insercion de datos

        private void dataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //MessageBox.Show("ERROR...\n"+e.Exception.ToString());
            //MessageBox.Show(sender.GetType().ToString());
            ((BindingSource)((DataGridView)sender).DataSource).CancelEdit();

        }

        #endregion

        #region Evento de los botones del BindingNavigator

        private void pRV_grupoSAVEBindingNavigator_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }
            //-- para evitar inconvenientes en el funcionamiento del maestro invalido la modificacion de esta informacion
            MessageBox.Show("Si modifica esta informacion se presentaran problemas en la avaluacion de desempeño de los proveedores.\n\nVerifique las consecuencias de esta accion.");
            return;    

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_grupo, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_grupoTableAdapter.Update(this.cORPORATIVADataSet.PRV_grupo);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_tipo_servicioSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }
            //-- para evitar inconvenientes en el funcionamiento del maestro invalido la modificacion de esta informacion
            MessageBox.Show("Si modifica esta informacion se presentaran problemas en la avaluacion de desempeño de los proveedores.\n\nVerifique las consecuencias de esta accion.");
            return;    

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_tipo_servicio, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_tipo_servicioTableAdapter.Update(this.cORPORATIVADataSet.PRV_tipo_servicio);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_entregaimperfecta_motivoSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }
            //-- para evitar inconvenientes en el funcionamiento del maestro invalido la modificacion de esta informacion
            MessageBox.Show("Si modifica esta informacion se presentaran problemas en la avaluacion de desempeño de los proveedores.\n\nVerifique las consecuencias de esta accion.");
            return;    

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_ENTREGAIMPERFECTA_MOTIVO, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_entregaimperfecta_motivoTableAdapter.Update(this.cORPORATIVADataSet.PRV_ENTREGAIMPERFECTA_MOTIVO);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }
                
        private void PRV_bancoSave_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }                

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_banco, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_bancoTableAdapter.Update(this.cORPORATIVADataSet.PRV_banco);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_TIP_CRITR_SAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR){
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }
            //-- para evitar inconvenientes en el funcionamiento del maestro invalido la modificacion de esta informacion
            MessageBox.Show("Si modifica esta informacion se presentaran problemas en la avaluacion de desempeño de los proveedores.\n\nVerifique las consecuencias de esta accion.");
            return;    

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_TIP_CRITR, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_TIP_CRITRTableAdapter.Update(this.cORPORATIVADataSet.PRV_TIP_CRITR);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_CRITR_SAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            //---si el usuario no tiene permisos de escritura no puede modificar los registros
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                MessageBox.Show("No cuenta con los permisos suficientes para modificar esta información.");
                return;
            }
            //-- para evitar inconvenientes en el funcionamiento del maestro invalido la modificacion de esta informacion
            MessageBox.Show("Si modifica esta informacion se presentaran problemas en la avaluacion de desempeño de los proveedores.\n\nVerifique las consecuencias de esta accion.");
            return;    


            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_CRITR, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_CRITRTableAdapter.Update(this.cORPORATIVADataSet.PRV_CRITR);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void add_Click(object sender, EventArgs e)
        {            
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.AddNew();
                this.tipoComboBox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }
      
        private void deshacer_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                   if (dt.TableName.Equals(bs.DataMember.ToString())) 
                    {
                        dt.RejectChanges();
                        bs.CancelEdit();
                        return; 
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void filter_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.RemoveFilter();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void filterText_TextChanged(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripTextBox)sender).GetCurrentParent()).BindingSource;
            ToolStripTextBox tb = (ToolStripTextBox)sender;
            try
            {
                String filtro = "";
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    if (dt.TableName.Equals(bs.DataMember.ToString()))
                    {
                        foreach (DataColumn cl in dt.Columns)
                        {
                            filtro += "ISNULL(" + cl.ColumnName.ToString() + ",'')+' '+";
                        }
                        filtro = filtro.Substring(0, filtro.Length - 5);
                        filtro+=" like'%"+tb.Text+"%'";
                        //MessageBox.Show(filtro);
                        bs.Filter = filtro;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        #endregion                

        private void helpPictureBox_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void XLSBancosToolStripButton_Click(object sender, EventArgs e)
        {
            Exportacion.Exportacion.exportar(Exportacion.Exportacion.EnumTipoFormatosExportar.XLS, this.pRV_bancoDataGridView, "Bnacos Extranjeros", false);
        }

        private void pRV_tipo_servicioBindingSource_CurrentChanged(object sender, EventArgs e)
        {

        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "mantenimiento.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
            
        }
    }
}
